/**
 * 调用签名 允许声明函数类型具有属性 与 函数表达式的语法有区别 后者采用对象添加属性，函数类型声明 为 (参数名 : 参数类型) : 返回值类型
 * 调用签名 保证函数既可以被调用，又具有属性被查看
 * */

type describableFunc = {
  description: string,
  (someArg: number): boolean
}

function doSomething(fn: describableFunc) {
  console.log(fn.description + ' returned ' + fn(6))
}

function fn1(n: number) {
  console.log(n)
  return true
}

fn1.description = 'hello'

doSomething(fn1)